iT邦幫忙

2025 iThome 鐵人賽

DAY 12
0
自我挑戰組

30 天用 Vibe Coding 打造多角色復健追蹤應用系列 第 12

Day 12|第二階段:核心 API 開發 (六)撰寫測試與更新文件

  • 分享至 

  • xImage
  •  

Day12,完成這階段的最後一個步驟:
API 驗證系統的測試撰寫與文件更新,將基本的 API 轉化為 生產等級的系統,具備完善的驗證邏輯、錯誤處理與測試覆蓋率。

1️⃣ 測試概述

本次測試共建立 64 個測試案例,涵蓋三大核心模組:

  1. Validator Tests (src/test/validation/validators.test.js - 32 個測試)

    驗證單一欄位或值的合法性,包括:

    • Email、密碼、ObjectId、日期、電話號碼
    • 數字範圍、字串、陣列、Enum
    • 檔案大小與類型、輸入資料的 XSS 防護
  2. Schema Tests (src/test/validation/schemas.test.js - 15 個測試)

    驗證複雜資料結構或整個物件:

    • 使用者註冊、登入
    • 復健任務建立、進度紀錄
    • 密碼變更、查詢參數、評論建立
  3. Middleware Tests (src/test/validation/middleware.test.js - 17 個測試)

    驗證 Express 中介軟體的行為:

    • Request body、Query、URL 參數驗證
    • 檔案上傳驗證、客製化函數、欄位組合
    • 流量限制、錯誤處理情境

2️⃣ 使用的方法與架構

(1) 單元測試架構

  • 使用 Jest 作為測試框架

  • ValidationUtils 負責單欄位或值的驗證:

    ValidationUtils.validateEmail(email)
    ValidationUtils.validatePassword(password, options)
    ValidationUtils.validateObjectId(id)
    ValidationUtils.validateDate(date, options)
    ValidationUtils.validatePhoneNumber(phone)
    ValidationUtils.validateNumericRange(number, options)
    ValidationUtils.validateString(str, options)
    ValidationUtils.validateArray(array, options)
    ValidationUtils.validateEnum(value, enumList, options)
    ValidationUtils.sanitizeInput(input)
    ValidationUtils.validateFile(file, options)
    
    
  • ValidationSchemas 定義資料結構規則:

    • 例如 userRegistrationrehabTaskCreationprogressSession
  • validateSchema(data, schema) 將資料與 Schema 對照,回傳驗證結果:

    const result = ValidationUtils.validateSchema(userData, ValidationSchemas.userRegistration);
    if (!result.isValid) console.log(result.errors);
    
    

(2) 測試策略

  1. 正向測試 (Valid Data)

    • 輸入完整且正確的資料,預期結果為 isValid = trueerrors = null

    • 例:

      expect(result.isValid).toBe(true);
      expect(result.errors).toBe(null);
      
      
  2. 負向測試 (Invalid Data)

    • 輸入格式錯誤或缺少必要欄位的資料,確認錯誤欄位是否正確回報

    • 例:

      expect(result.isValid).toBe(false);
      expect(result.errors.firstName).toBeDefined();
      expect(result.errors.email).toBeDefined();
      
      
  3. 邊界與選填測試 (Optional / Empty Fields)

    • 測試非必填欄位可否留空,避免系統誤拒

    • 例:

      const minimalUserData = { firstName, lastName, email, password, role };
      const result = ValidationUtils.validateSchema(minimalUserData, ValidationSchemas.userRegistration);
      expect(result.isValid).toBe(true);
      
      

(3) 測試覆蓋與工具

  • Jest 配置
    • jest.config.js 設定測試模式、覆蓋率門檻、測試檔案匹配規則
  • 測試環境
    • 全域 Setup/Teardown、mock 外部依賴
    • 使用 helper 函數與模擬檔案物件
  • 測試結果
    • Validation Middleware:85.58% line coverage
    • Validation Schemas:88.54% line coverage
    • Validation Validators:82.81% line coverage
    • 所有 64 個測試案例皆成功通過

3️⃣ 文件更新

同時對 README.md 做了全面更新,包含:

  • 安裝指引:逐步環境建置說明
  • API 文件:完整路由與範例
  • 資料模型:欄位與 Schema 詳細說明
  • 安全性說明:驗證規則、XSS 防護、密碼強度等
  • 測試指南:如何執行測試與解讀覆蓋率
  • 專案結構:目錄與模組架構
  • 開發指南:貢獻規範與程式風格指引

4️⃣ 成果與價值

這兩個步驟將原本的 基本 API 轉變為 生產等級系統

  • 完整的 資料驗證錯誤處理
  • 高測試覆蓋率,確保程式邏輯正確
  • 清晰的文件,方便開發者與使用者快速上手

專案Github Repo : https://github.com/CHING-WENLAI1031/Rehab_Tracker


上一篇
Day 11|第二階段:核心 API 開發 (五)輸入驗證系統與錯誤處理強化
下一篇
Day 13|第三階段:開發角色專屬儀表板與工作流程 API
系列文
30 天用 Vibe Coding 打造多角色復健追蹤應用13
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言